Release 10.1A: OpenEdge Development:
Progress 4GL Reference
DEFINE BROWSE statement
Defines and creates either a static read-only browse widget or a static updateable browse widget.
Note: Does not apply to SpeedScript programming.Syntax
NEW SHARED BROWSEbrowse-nameDefines and identifies a browse widget that can be used by other procedures. When the procedure containing this statement ends, the browse is no longer available.
SHARED BROWSEbrowse-nameDefines and identifies a browse that was created in another procedure with the DEFINE NEW SHARED BROWSE statement.
[ PRIVATE ] BROWSEbrowse-nameDefines and identifies a browse widget as a data member for a class, and optionally specifies an access mode for that data member. Do not specify the access mode when defining a browse widget for a method within a class.
PRIVATE data members can be accessed only by the defining class. The default access mode is PRIVATE.
Note: This option is applicable only when defining a data member for a class in a class definition (.cls) file.BROWSEbrowse-nameIdentifies the name of the browse you want to define for the query. You can define the browse widget in a procedure or a method within a class.
QUERYquery-nameThe name of the query to browse. You must have previously defined or opened the query.
[ SHARE-LOCK | EXCLUSIVE-LOCK | NO-LOCK ]Specifies the locking mode for records retrieved by the browse widget. The default locking mode is NO-LOCK. To control locking during preselection for a query associated with a browse widget, use the SHARE-LOCK, EXCLUSIVE-LOCK, or NO-LOCK option in the OPEN QUERY statement that opens the query.
NO-WAITSpecifies not to wait for a record that is currently locked by another process. Instead, the record in conflict will be made available in NO-LOCK mode and the LOCKED function for that record will return TRUE.
DISPLAYcolumn-listSpecifies the column items to display in the browse. Note that the
column-listcannot contain widgets other than fill-ins and thecolumn-listcannot contain SKIP options.
expressionA field name, variable, constant, or expression to display in each iteration of the browse frame.
column-format-phraseSpecifies the format for a value displayed in the browse. The
column-format-phraseis a subset of the Format phrase.
WIDTHnSpecify a width for the browse column.
nrepresents a multiplier of the average character width of the column font. Specifying a width smaller than the format string creates a scrolling browse cell, if the column is updateable.For more information on FORMAT strings and label options, see the Format phrase reference entry. The column and label color and font options work like those specified in the
browse-options-phrase. If color or fonts are specified with this phrase, they only affect the specific column and override similar options specified in thebrowse-options-phrase.@base-fieldThe
base-fieldmust be the name of a field or variable; it cannot be an expression or constant.Progress reserves enough space for the
base-fieldto hold the longest format displayed there. All right-justified fields (numeric fields that do not use side labels) are right justified within the reserved area.To determine the format to use for displaying the expression at the
base-field, Progress looks at the following and uses the first format that applies:
- An explicit format used with the
expression.- If the expression is a character string constant, a format that accommodates that string.
- If the data type of the expression matches that of the
base-field, the format of thebase-field.- The standard format of the expression as if it were displayed without a
base-field.DISPLAYrecordSpecifies the record you want to display. If you specify a record, all fields from the record are displayed unless you use the EXCEPT option to eliminate specific fields.
See the Record phrase reference entry for more information.
EXCEPTfield. . .Specifies fields that are not displayed in the browse. You can use the EXCEPT option only if you specify a record name in the DISPLAY option.
browse-enable-phraseSpecifies which fields in the
column-listare enabled for input.
List each field or variable from the
column-listthat you want enabled. Specify ALL to specify every item in thecolumn-list. Use the EXCEPT option to exclude specific items when you use the ALL option.For each field or variable, you can also specify custom help and validation, as shown in the next two entries.
HELPstringRepresents a character string that you want to display whenever the user enters the frame field for the field or variable. When the user leaves the frame field, Progress removes the help string from the message area. You must enclose the string in quotation marks ("").
VALIDATE (condition,msg-expression)Specifies an expression that you want to validate against the data entered into a the browse cell. The
conditionis a Boolean expression (a constant, field name, variable name, or expression) whose value is TRUE or FALSE.When you use the VALIDATE option to validate a specific cell, any reference to that cell in
conditionis assumed to be the new input value. For example, in thebrowse-enable phrasebelow, the promise-date that is compared to the order-date is the new user input, not the existing data:
To validate a new value against another new value, use the INPUT qualifier, as shown below:
If the value of
conditionis FALSE, usemsg-expressionto display a specific message. You must enclosemsg-expressionin quotation marks ("").Progress processes validation criteria whenever the user attempts to leave the browse cell. If the cell value is not valid, Progress displays
msg-expressionin the message area, causes the terminal to beep, and does not advance out of the browse cell.If the user tabs to a cell, makes no changes, and leaves the cell, Progress does not process the validation criteria specified with the VALIDATE option until the you press GO (F1). If the user presses ENDKEY or END-ERROR, or an error occurs, Progress does not test the validation criteria specified with the VALIDATE option.
If the input source for the procedure is a table, Progress validates each input field (except those with a value of "-"). If the result of the validation is FALSE,
msg-expressionis displayed and Progress treats the validation as an error.To suppress the Data Dictionary validation criteria for a cell, use this VALIDATE option:
AUTO-RETURNIndicates whether Progress should behave as if the user pressed the RETURN key.when the user enters the last allowable character in a browse cell of the specified browse-column.
DISABLE-AUTO-ZAPIndicates whether Progress should ignore the value of the browse-column’s AUTO-ZAP attribute and assume it is FALSE.
browse-options-phraseSpecifies options that affect the browse widget as a whole. The options affect both the layout and the function of the browse widget. (Note that you cannot include aggregate-phrases (TOTAL, MIN, etc.) in this phrase.) This is the syntax for
browse-options-phrase:
[constant] DOWN [ WIDTHwidth]The
constantvalue is the number of rows displayed in the browse and must be at least 2. You can optionally specify the width of the browse, wherewidthis the width of the browse in character units.A
browse-options-phrasemust contain a DOWN option or asize-phrase.size-phraseSpecifies the outer size of the browse border. When this option is used instead of the DOWN option, Progress determines the number of rows that can be displayed in the browse. Following is the syntax for
size-phrase:
For more information on
size-phrase, see the SIZE phrase reference entry.A
browse-options-phrasemust contain a DOWN option (optionally with a WIDTH option) or asize-phrase.FGCOLORexpressionSpecifies the foreground color for the browse in graphical environments, but not the label foreground color. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in character environments.BGCOLORexpressionSpecifies the background color for the browse in graphical environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in character environments.DCOLORexpressionSpecifies the display color for the browse in character environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in graphical environments.PFCOLORexpressionSpecifies the prompt color for the browse in character environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in graphical environments.LABEL-FONTconstantSpecifies the font of the browse labels.
LABEL-DCOLORexpressionSpecifies the display color for the browse labels in character environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in graphical environments.LABEL-FGCOLORexpressionSpecifies the foreground color for the browse labels in graphical environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in character environments.LABEL-BGCOLORexpressionSpecifies the background color for the browse labels in graphical environments. The value of
expressionmust be an integer value that specifies an entry in the color table. This option is ignored in character environments.[ MULTIPLE | SINGLE ]Specifies whether multiple rows can be selected from the browse or only a single row at one time. The default is SINGLE.
[ SEPARATORS | NO-SEPARATORS ]Specifies whether row and column separators are displayed within the browse. The default is NO-SEPARATORS.
NO-ASSIGNDisables automatic writes on new data in an updateable browse. If this option is not specified, data entered into an updateable browse is assigned on any action that results in a ROW-LEAVE event. This option is intended for use with user-defined triggers on the ROW-LEAVE event. Essentially, when this option is specified, you must make all data assignments by way of the updateable browse.
In the above example, the code looks for a special case where automatic database writes are not desirable and prevents them. The body of the trigger handles other processing before proceeding to commit the changes. First the trigger refinds the current customer record and then uses the CURRENT-CHANGED function to see if it has changed while the user was updating the browse cells. If it has not changed, the changes are committed. If it has changed, the trigger would handle that condition, too.
Note that an ASSIGN statement with the INPUT BROWSE option can be mixed with other assignment types, as shown:
NO-ROW-MARKERSBy default, an updateable browse displays row markers, which allow the user to select currently displayed rows in an updateable browse widget. This option prevents row markers from being displayed.
NO-LABELSDoes not display labels above the columns of the browse.
NO-BOXDoes not display a box around the browse. If you do not use this option, Progress displays a box around the data you are displaying.
If you are sending data to a device other than a terminal and you do not use this option, Progress omits the sides and bottom line of the box and replaces the top line with blanks.
FONTconstantSpecifies the font of the browse. The title and labels also use this font, unless otherwise specified.
title-phraseDisplays a title as part of the top line of the box around the browse. For example:
The
title-stringis a constant, field name, variable name, or expression whose result is a character value. Theexpressionis the value you want to display as a title. Iftitle-stringis a constant character string, it must be surrounded by quotes (""). Progress automatically centerstitle-stringin the top line of the browse box.You can use the BGCOLOR and FGCOLOR options to specify the background and foreground color of the title under a graphical user interface. You can use the DCOLOR option to specify the color of the title under a character user interface.
NO-VALIDATETells Progress to ignore the validations conditions in the schema for all fields in the browse.
Since browses do not inherit the NO-VALIDATE option from a parent frame, if you want a browse to have this option, you must specify it explicitly.
NO-SCROLLBAR-VERTICAL | SCROLLBAR-VERTICALIndicates whether the browse displays a vertical scrollbar. The default is for the vertical scrollbar to appear.
ROW-HEIGHT-CHARS | ROW-HEIGHT-PIXELSrow-heightAn INTEGER representing the row height in characters or pixels.
This option applies to graphical interfaces only.
The ROW-HEIGHT-CHARS and ROW-HEIGHT-PIXELS options let you specify the browse’s row height, in either characters or pixels.
FIT-LAST-COLUMNAllows the browse to be displayed so that there is no empty space to the right and no horizontal scroll bar by potentially widening or shrinking the last browse column’s width.
This option applies to graphical interfaces only.
When this option is specified, and the last browse column can be fully or partially displayed in the browse’s viewport, then the last browse column’s width is adjusted so that it fits within the viewport with no empty space to its right and no horizontal scroll bar.
If the last browse column is fully contained in the viewport with empty space to its right, it grows so that its right edge is adjacent to the vertical scroll bar.
If the last browse column extends outside the viewport, it shrinks so its right edge is adjacent to the vertical scroll bar and the horizontal scroll bar is not needed.
The default value is FALSE.
Note: The FIT-LAST-COLUMN option performs the same function as the EXPANDABLE option. Progress Software recommends that you use the FIT-LAST-COLUMN option instead of the EXPANDABLE option. This recommendation includes replacing EXPANDABLE with FIT-LAST-COLUMN in your current code.EXPANDABLEIf you set a browse’s EXPANDABLE option to TRUE, Progress extends the right-most browse-column horizontally to the browse’s right edge, if necessary, to cover any white space that might appear there — unless you explicitly set the width of the right-most browse-column using the WIDTH-CHARS or WIDTH-PIXELS option. The expansion of the right-most browse-column might occur anytime the browse or another browse-column is resized.
The right-most browse-column expands only when there is no horizontal scroll bar. This is because when there is a horizontal scroll bar, no white space appears between the right edge of the right-most browse-column and the right edge of the browse.
Note: The EXPANDABLE option performs the same function as the FIT-LAST-COLUMN option. Progress Software recommends that you use the FIT-LAST-COLUMN option instead of the EXPANDABLE option. This recommendation includes replacing EXPANDABLE with FIT-LAST-COLUMN in your current code.NO-EMPTY-SPACEAllows the browse to display with no empty space to the right and no horizontal scroll bar.
You cannot specify both NO-EMPTY-SPACE and FIT-LAST-COLUMN for the DEFINE BROWSE statement. If you specify both, the compiler displays an error message. If you set either the NO-EMPTY-SPACE option or the DEFINE BROWSE option to TRUE and one of them is already TRUE, a warning message displays at run time.
NO-AUTO-VALIDATETells Progress to compile into the code all relevant validations it finds in the OpenEdge Data Dictionary, but to run the validations only when the code for a browse or for a browse-column specifically invokes the VALIDATE() method.
CONTEXT-HELP-IDexpressionAn integer value that specifies the identifier of the help topic for this browse in a help file specified at the session, window, or dialog box level using the CONTEXT-HELP-FILE attribute.
DROP-TARGETIndicates whether the user can drop a file onto the object.
TOOLTIPtooltipAllows you to define a help text message for a browse widget. Progress automatically displays this text when the user pauses the mouse pointer over a browse widget for which a ToolTip is defined. You can add or change the TOOLTIP option at any time.
If TOOLTIP is set to "" or the Unknown value (
Examples?), then the ToolTip is removed from the browse. No ToolTip is the default. ToolTips are supported in Windows only.This procedure sets up a read-only browse widget for the customer table. The browse displays the Cust-num and Name fields. A separate frame,
f2, displays more information on the currently chosen customer.
The VALUE-CHANGED event occurs each time the user selects a row within the browse widget. The associated database record is automatically placed into the record buffer. The trigger on the VALUE-CHANGED event displays that record in frame
f2.The APPLY statement causes the first Customer record to display before the user selects a record.
The second example sets up an updateable browse that displays some fields from the customer table. Select a row marker to select a row. Select a cell to edit it. Select a column label to initiate a search. (The trigger on ROW-LEAVE is only necessary because the NO-ASSIGN option prevents automatic commitment of the data when the user leaves a row.)
Notes
- You cannot define a SHARED or NEW SHARED browse widget in a persistent procedure. If you do, Progress raises ERROR on the RUN statement that creates the procedure.
- You cannot define a SHARED or NEW SHARED browse widget in a class definition (
.cls) file. If you do, Progress generates a compilation error.- The vertical scrollbar is displayed with the browse by default in Windows interfaces. It may be removed by setting the SCROLLBAR-VERTICAL attribute to FALSE or by specifying NO-SCROLLBAR-VERTICAL in the DEFINE BROWSE statement. If the horizontal scrollbar is needed, it is provided by default.
- The vertical scrollbar thumb size reflects the percentage of rows that are displayed in the viewport relative to the number of rows in the results list. If all the rows have not yet been read into the results list, the Progress 4GL uses the MAX-DATA-GUESS attribute to estimate the total size.
- You must put the browse into a frame on the same procedure level on which the browse is defined. For example, you cannot define a browse in an outer procedure and then display it in a frame defined within an internal procedure.
- You cannot display a browse widget in a down frame. Progress automatically converts any frame containing a browse to a 1 down frame.
- You can modify the field values displayed in the current iteration of a browse by using the WITH BROWSE option of the DISPLAY statement. For example:
- The browse widget has built-in support for the HOME, END, PAGE-UP, and PAGE-DOWN key functions.
- You can specify an application-defined widget ID for a static browse widget using the
form-itemphrase in either the FORM statement or the DEFINE FRAME statement. See the FORM statement and DEFINE FRAME statement reference entries for more information.- Progress treats the query associated with a browse as a scrolling query. You do not have to specify SCROLLING in the DEFINE QUERY statement.
- When you execute an OPEN QUERY or REPOSITION statement for the query associated with the browse, the browse is automatically adjusted to remain in sync with the query. However, when you execute a GET statement, the browse is not adjusted. You can use the GET statement to perform background processing without affecting the browse, but you must execute a REPOSITION statement to put the query and browse back in sync.
- The record locking behavior specified for a query in the DEFINE BROWSE statement overrides the record locking behavior specified with the OPEN QUERY statement. The default record locking behavior of a browse widget is NO-LOCK. The default record locking behavior of a query defined with the OPEN QUERY statement is SHARE-LOCK. If you define a query and a browse widget for the query without explicitly defining record locking behavior, the query will have the NO-LOCK behavior.
- For an updateable browse, Progress re-gets the record with a SHARE-LOCK when the user first edits a row, if it initially has a NO-LOCK. The user then can make changes to the updateable cells in the row. When the user leaves a row with changes (moves to a new row or another widget), Progress starts a transaction and gets the record with EXCLUSIVE-LOCK and NO-WAIT. If Progress gets the record, the record is updated, the record is disconnected (removes the lock), the transaction ends, and the lock is downgraded to its original status. If the get record with EXCLUSIVE-LOCK fails, the transaction is backed out, an error message is displayed, and focus remains with the edited browse row with the changed data. To redisplay the original data, use the DISPLAY...WITH BROWSE statement.
- All LEAVE triggers for a browse row execute before the row changes are committed. If the LEAVE trigger returns a NO-APPLY, the changes are not committed.
- It is also possible to use an updateable browse to add new records and delete old ones. For a complete discussion of these techniques, see the browse chapter in OpenEdge Development: Progress 4GL Handbook .
- Browse widgets in Windows have user search capabilities. Special events allow you to extend these capabilities. For a complete discussion of these techniques, see the chapter on database access in OpenEdge Development: Progress 4GL Handbook .
- When an updateable browse enters edit mode, all selected records are deselected. Essentially, a browse in edit mode ignores multiple selections.
- The ADD-CALC-COLUMN, ADD-COLUMNS-FROM and ADD-LIKE-COLUMN methods may be used on a static browse to add a dynamic browse column. If a dynamic browse column in a static browse is made updateable, the browse is changed to a NO-ASSIGN browse and you become responsible for any database update associated with it.
- The browse’s QUERY attribute can now be set to the Unknown value (
?). If this is done, all browse-columns are removed.- The browse’s QUERY attribute can now be changed to any query. Previously, the new query had to have the same underlying fields as the original query. If the new query is different, all browse columns are removed. You must specify new columns with the ADD-CALC-COLUMN, ADD-COLUMNS-FROM, and ADD-LIKE-COLUMN methods.
See also
ADD-CALC-COLUMN( ) method, ADD-COLUMNS-FROM( ) method, ADD-LIKE-COLUMN( ) method, CLOSE QUERY statement, CREATE BROWSE statement, CURRENT-CHANGED function, CURRENT-RESULT-ROW function, DEFINE QUERY statement, DISPLAY statement, FIND statement, FORM statement, Format phrase, Frame phrase, GET statement, NUM-RESULTS function, OPEN QUERY statement, RUN statement
|
Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095 |